【Odin】OnValueChanged

August 12, 2022


Inspectorを拡張するアセットで超有名なOdin https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041?locale=ja-JP

OnValueChanged

SerialzieField変数がInspectorから変更された時のコールバックを指定できます

使い方も簡単で変数にOnValueChangedを指定するだけです

using UnityEngine;
using Sirenix.OdinInspector;

public class Sample_OnValueChanged : MonoBehaviour
{
	[SerializeField]
	[OnValueChanged("OnChanged")] // OnChangedが呼び出される
	private int _int;

	private void OnChanged()
	{
		Debug.Log("Called");
	}
}

これでインスペクタからValueを触ると OnChanged が呼び出されます

CED416D1687F60C8CEDADA96A388E6D0

子クラス、配列変更

Serializableなクラス、またその配列が変更されたときは includeChildren をtrueにします

using UnityEngine;
using Sirenix.OdinInspector;


[System.Serializable]
public class Hoge
{
	[SerializeField]
	private int _value;
}


public class Sample_OnValueChanged : MonoBehaviour
{
	[SerializeField]
	[OnValueChanged("OnChanged", includeChildren: true)]
	private Hoge _hoge;

	[SerializeField]
	[OnValueChanged("OnChanged", includeChildren: true)]
	private Hoge[] _hoges;

	private void OnChanged()
	{
		Debug.Log("Called");
	}
}

CAB40D971C71D2F744E70319E50E2731

Editor開発時に重宝する機能になりますが注意点として ・変更前の値が取れないため比較ができない ・スクリプトから編集したときは呼び出されず、Editorから編集したときのみ呼び出される

があります